package main

import (
	"encoding/json"
	"fmt"
)

// 私有字段无法访问， 所以在 go 中可能私有字段比较少用
type Student struct {
	Id     int
	Gender string
	Name   string
	Sno    string
}

func main() {
	var s Student
	s.Id = 1
	s.Gender = "男"
	s.Name = "张三"
	s.Sno = "001"
	// 打印结构体
	fmt.Printf("%#v\n", s) // main.Student{Id:1, Gender:"男", Name:"张三", Sno:"001"}

	var json1, _ = json.Marshal(s) // 结构体转换 json
	jsonRes := string(json1)       // 必须要转字符串类型， 否则打印会是 ascii 码
	// [123 34 73 100 34 58 49 44 34 71 101 110 100 101 114 34 58 34 231 148 183 34 44 34 78 97 109 101 34 58 34 229 188 160 228 184 137 34 44 34 83 110 111 34 58 34 48 48 49 34 125]
	fmt.Println(jsonRes) //{"Id":1,"Gender":"男","Name":"张三","Sno":"001"}

	// json 转 结构体
	var s2 Student
	json2 := []byte(jsonRes)
	json.Unmarshal(json2, &s2)
	fmt.Printf("%#v\n", s2)       // main.Student{Id:1, Gender:"男", Name:"张三", Sno:"001"}
	fmt.Printf("%v\n", s2.Name)   // 张三
	fmt.Printf("%v\n", s2.Sno)    // 001
	fmt.Printf("%v\n", s2.Gender) // 男
	fmt.Printf("%v\n", s2.Id)     // 1
}
